/*
 * OLED显示屏测试代码 - Arduino版本（可自定义引脚）
 * 适用于0.96寸 128x64 I2C OLED显示屏
 * 智能学习桌项目 - 硬件测试
 */

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// ========== 引脚配置区域 ==========
// 🔧 在这里修改你的连接引脚
#define OLED_SDA_PIN A4     // OLED SDA引脚 (数据线)
#define OLED_SCL_PIN A5     // OLED SCL引脚 (时钟线)

// 如果使用其他引脚，修改上面的定义，例如：
// #define OLED_SDA_PIN 2   // 使用数字引脚2作为SDA
// #define OLED_SCL_PIN 3   // 使用数字引脚3作为SCL

// OLED显示屏参数
#define SCREEN_WIDTH 128    // OLED显示宽度（像素）
#define SCREEN_HEIGHT 64    // OLED显示高度（像素）
#define OLED_RESET -1       // 复位引脚（如果没有复位引脚则设为-1）
#define SCREEN_ADDRESS 0x3C // OLED I2C地址（通常是0x3C或0x3D）

// 创建OLED显示对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // 初始化串口通信
  Serial.begin(115200);
  Serial.println("OLED显示屏测试开始...");
  
  // ========== I2C引脚初始化 ==========
  // 🔧 使用自定义引脚初始化I2C
  Wire.begin();  // 使用默认引脚 (Arduino Uno: SDA=A4, SCL=A5)
  
  // 如果要使用自定义引脚（仅ESP32支持），取消下面注释：
  // Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN);
  
  Serial.print("I2C引脚配置: SDA=");
  Serial.print(OLED_SDA_PIN);
  Serial.print(", SCL=");
  Serial.println(OLED_SCL_PIN);

  // 初始化OLED显示屏
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("SSD1306分配失败");
    Serial.println("请检查:");
    Serial.println("1. 连接是否正确");
    Serial.println("2. I2C地址是否正确");
    Serial.println("3. 电源是否为3.3V");
    for(;;); // 无限循环，停止程序
  }

  Serial.println("OLED显示屏初始化成功！");
  
  // 清除显示缓冲区
  display.clearDisplay();
  
  // 显示初始化成功信息
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("OLED Test OK!");
  display.display();
  
  delay(2000);
}

void loop() {
  // 测试1：基本文本显示
  testBasicText();
  delay(3000);
  
  // 测试2：不同字体大小
  testTextSizes();
  delay(3000);
  
  // 测试3：图形绘制
  testGraphics();
  delay(3000);
  
  // 测试4：智能学习桌信息显示
  testSmartDeskDisplay();
  delay(3000);
  
  // 测试5：动态信息更新
  testDynamicUpdate();
  delay(3000);
}

// 测试1：基本文本显示
void testBasicText() {
  display.clearDisplay();
  
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("智能学习桌项目");
  display.println("OLED显示测试");
  display.println("");
  display.println("基本文本显示");
  display.println("测试正常!");
  
  display.display();
  Serial.println("基本文本显示测试完成");
}

// 测试2：不同字体大小
void testTextSizes() {
  display.clearDisplay();
  
  // 大标题
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("学习桌");
  
  // 中等文字
  display.setTextSize(1);
  display.setCursor(0, 20);
  display.println("坐姿监测系统");
  display.println("语音交互功能");
  display.println("数据记录分析");
  
  display.display();
  Serial.println("字体大小测试完成");
}

// 测试3：图形绘制
void testGraphics() {
  display.clearDisplay();
  
  // 绘制矩形框
  display.drawRect(0, 0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1, SSD1306_WHITE);
  
  // 绘制标题
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(30, 5);
  display.println("图形测试");
  
  // 绘制线条
  display.drawLine(10, 20, 118, 20, SSD1306_WHITE);
  
  // 绘制圆形
  display.drawCircle(30, 40, 10, SSD1306_WHITE);
  
  // 绘制填充矩形
  display.fillRect(50, 30, 20, 20, SSD1306_WHITE);
  
  // 绘制三角形
  display.drawTriangle(80, 30, 90, 50, 100, 30, SSD1306_WHITE);
  
  display.display();
  Serial.println("图形绘制测试完成");
}

// 测试4：智能学习桌信息显示
void testSmartDeskDisplay() {
  display.clearDisplay();
  
  // 标题
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("=== 学习状态 ===");
  
  // 模拟数据显示
  display.setCursor(0, 12);
  display.print("距离: ");
  display.print("35.2");
  display.println(" cm");
  
  display.setCursor(0, 22);
  display.print("坐姿: ");
  display.println("良好");
  
  display.setCursor(0, 32);
  display.print("时长: ");
  display.print("45");
  display.println(" 分钟");
  
  display.setCursor(0, 42);
  display.print("专注度: ");
  display.print("85");
  display.println("%");
  
  display.setCursor(0, 52);
  display.println("状态: 学习中...");
  
  display.display();
  Serial.println("智能学习桌信息显示测试完成");
}

// 测试5：动态信息更新
void testDynamicUpdate() {
  Serial.println("动态更新测试开始");
  
  for(int i = 0; i < 10; i++) {
    display.clearDisplay();
    
    // 标题
    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 0);
    display.println("=== 实时监测 ===");
    
    // 模拟动态数据
    float distance = 30.0 + (i * 2.5);
    int focus = 80 + (i % 20);
    int minutes = 30 + i;
    
    display.setCursor(0, 15);
    display.print("距离: ");
    display.print(distance, 1);
    display.println(" cm");
    
    display.setCursor(0, 25);
    display.print("专注度: ");
    display.print(focus);
    display.println("%");
    
    display.setCursor(0, 35);
    display.print("学习: ");
    display.print(minutes);
    display.println(" 分钟");
    
    // 状态指示
    display.setCursor(0, 45);
    if(distance < 25 || distance > 50) {
      display.println("状态: 调整坐姿");
    } else {
      display.println("状态: 坐姿良好");
    }
    
    // 进度条
    int progress = (i + 1) * 12;
    display.drawRect(0, 55, 128, 8, SSD1306_WHITE);
    display.fillRect(2, 57, progress, 4, SSD1306_WHITE);
    
    display.display();
    delay(1000);
  }
  
  Serial.println("动态更新测试完成");
}

// 显示启动画面
void showBootScreen() {
  display.clearDisplay();
  
  // 大标题
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(10, 10);
  display.println("智能");
  display.setCursor(10, 30);
  display.println("学习桌");
  
  // 版本信息
  display.setTextSize(1);
  display.setCursor(0, 55);
  display.println("v1.0 - OLED Test");
  
  display.display();
}

// 显示错误信息
void showError(String errorMsg) {
  display.clearDisplay();
  
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("=== 错误信息 ===");
  display.setCursor(0, 15);
  display.println(errorMsg);
  display.setCursor(0, 50);
  display.println("请检查连接...");
  
  display.display();
}

// 显示系统状态
void showSystemStatus(float distance, int focus, int studyTime) {
  display.clearDisplay();
  
  // 标题
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("=== 系统状态 ===");
  
  // 距离信息
  display.setCursor(0, 12);
  display.print("距离: ");
  display.print(distance, 1);
  display.println(" cm");
  
  // 专注度
  display.setCursor(0, 22);
  display.print("专注度: ");
  display.print(focus);
  display.println("%");
  
  // 学习时长
  display.setCursor(0, 32);
  display.print("学习: ");
  display.print(studyTime);
  display.println(" 分钟");
  
  // 状态评估
  display.setCursor(0, 42);
  display.print("状态: ");
  if(distance >= 30 && distance <= 50) {
    display.println("良好");
  } else if(distance < 25) {
    display.println("过近");
  } else {
    display.println("过远");
  }
  
  // 时间显示
  display.setCursor(0, 52);
  display.print("运行时间: ");
  display.print(millis() / 1000);
  display.println("s");
  
  display.display();
}